import defineReactiveData from "./reactive";
import { arrMethods } from "./array";
import { observeArr } from "./observeArr";
function Observer(data){
    if (Array.isArray(data)) {
        data.__proto__ = arrMethods; // 原型继承数组方法
        // data里可能还是数组
        observeArr(data); // 观察数组
    }else{
     // 对象
        this.walk(data); // 创建响应式对象
    }

}

Observer.prototype.walk = function(data){
    var keys = Object.keys(data); // 获取对象的所有属性
    // 遍历属性
    for (var i = 0; i<keys.length;i++){
        var key = keys[i];
        var value = data[key];
        defineReactiveData(data,key,value) // 定义响应式属性
    }

}
export default Observer;

// {} 通过 definePropery 实现双向绑定
// [] 通过重写数组方法实现双向绑定